package io.youngledo.usb.license;

/// 功能特性枚举
///
/// 定义通用存储浏览器的各项功能特性，用于功能门控。
/// 每个功能都有对应的最低许可证要求。
public enum Feature {
    /// 批量上传下载（专业版功能）
    ///
    /// 允许一次性选择多个文件进行上传或下载操作
    BATCH_OPERATIONS("批量操作", LicenseType.PROFESSIONAL),

    /// 后台任务管理（专业版功能）
    ///
    /// 包括：
    /// - 任务队列管理
    /// - 暂停/恢复/取消任务
    /// - 并发任务调度
    /// - 详细进度跟踪
    TASK_MANAGEMENT("任务管理", LicenseType.PROFESSIONAL),

    /// 无限制并发连接（专业版功能）
    ///
    /// 社区版限制：最多2个并发连接
    /// 专业版：无限制连接数
    UNLIMITED_CONNECTIONS("无限连接", LicenseType.PROFESSIONAL),

    /// 高级UI功能（专业版功能）
    ///
    /// 包括：
    /// - 自定义主题
    /// - 快捷键支持
    /// - 高级筛选和搜索
    /// - 批量重命名
    ADVANCED_UI("高级界面", LicenseType.PROFESSIONAL),

    /// 实时速度显示和预估时间（专业版功能）
    ///
    /// 详细的进度信息：
    /// - 实时传输速度
    /// - 预计完成时间
    /// - 已传输/总大小
    ADVANCED_PROGRESS("高级进度", LicenseType.PROFESSIONAL);

    private final String displayName;
    private final LicenseType requiredLicense;

    Feature(String displayName, LicenseType requiredLicense) {
        this.displayName = displayName;
        this.requiredLicense = requiredLicense;
    }

    /// 获取功能显示名称
    public String getDisplayName() {
        return displayName;
    }

    /// 获取所需的最低许可证类型
    public LicenseType getRequiredLicense() {
        return requiredLicense;
    }

    /// 判断指定许可证类型是否支持此功能
    ///
    /// @param licenseType 要检查的许可证类型
    /// @return 如果许可证级别足够则返回true
    public boolean isAvailableIn(LicenseType licenseType) {
        return switch (requiredLicense) {
            case COMMUNITY -> true; // 社区版功能所有版本都支持
            case PROFESSIONAL -> licenseType == LicenseType.PROFESSIONAL;
        };
    }
}
